﻿#ifndef DATABASE_H
#define DATABASE_H

#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlQuery>
#include<QTime>
#include<QTextCodec>
#include<QtDebug>
#include<QSqlDriver>
#include<QSqlRecord>
#include<QList>
#include<QStringList>

struct info{
    QString buildingid;
    QString address;
    QString name;
    QString Tel;
};

//定义表名
const QString tableIO = "IO";
const QString tableOwner = "Owner";
const QString tableMember = "Member";
const QString tableShopping = "Shopping";
const QString tableStaff = "Staff";



class DataBase
{
public:
    QStringList OwnerTHead;
    QStringList StaffTHead;
    QStringList IOTHead;
    QStringList MemberTHead;
    QStringList ShoppingTHead;
    DataBase();
    bool createConnection();
    bool createTable();
    void createTableHeader();
    //业主表 工作人员表 家属表的修改和删除函数
    void Update(QString tablename,QString attributeName,QString newValue,QString keyValue);
    void Delete(QString tablename,QString keyValue);
    QList<QStringList> SelectAll(QString tablename);
    QList<QStringList> Select(QString tablename,QString keyValue);
    QList<QStringList> Select(QString tablename,QString attributeName, QString keyValue);
    //登录验证函数，传入参数为表名(业主或工作人员)，账户，密码，用于缓存信息的指针引用
    //登陆成功返回true，登录失败返回false
    bool Login(QString tablename,QString account,QString password,info& person);
    //判断家庭健康状态函数，传入参数为业主名，返回值为字符串（健康/有疑似患者/有确诊患者）
    QString IsHealthy(QString ownername);

    //业主表操作函数
    //业主表属性排序: 楼栋号 门牌号 姓名 性别 年龄 联系方式 体温 健康状况 账户 密码, 相关函数输入参数顺序与之相同
    void Insert(QString buildingid,QString address,QString name,QString sex,int age,QString tel,double temperature,QString health);
    void Update(QString name,QString sex,int age,QString tel,double temperature,QString health,
                      QString account,QString password);
    //void Owner_update(QString buildingid,QString address,QString name,QString sex,int age,QString tel,double temperature,QString health);
    //void Owner_delete(QString buildingid,QString address);

    //工作人员操作函数
    //物业工作人员表属性排序: 编号(负责楼栋) 姓名 性别 年龄 联系方式 体温 健康状况 账户 密码, 相关函数输入参数顺序与之相同
    void Insert(QString id,QString name,QString sex,int age,QString tel,double temperature,QString health);
    void Update(QString id,QString name,QString sex,int age,QString tel,double temperature,QString health,
                QString account,QString password);
//    void Update(QString id,QString name,QString sex,int age,QString tel,double temperature,QString health);
//    void Stuff_delete(QString id);

    //进出表操作函数
    //进出小区登记表属性排序: 日期 姓名 联系方式 进入时间 离开时间 体温 进入楼栋, 相关函数输入顺序与之相同
    void Insert(QString date,QString name,QString tel,QString intime,QString outtime,double temperature,QString buildingid);
    void Update(QString attributeName,QString newValue,QString date,QString tel,QString intime);
    void IO_delete(QString date,QString tel,QString intime);

    //家属表操作函数
    //家属表属性排序: 楼栋号 门牌号 业主姓名 姓名 性别 年龄 联系方式 体温 健康状况, 相关函数输入参数顺序与之相同
    void Insert(QString buildingid,QString address,QString ownername,QString name,QString sex,int age,QString tel,
                double temperature,QString health);
//    void Member_update(QString buildingid,QString address,QString name,QString sex,int age,QString tel,double temperature,QString health);
//    void Member_delete(QString buildingid,QString address,QString name);

    //购物表操作函数
    //购物信息表属性排序: 楼栋号 门牌号 业主名 联系方式 商品名 数量 下单时间 送达时间 送达状态, 相关函数输入参数顺序与之相同
    void Insert(QString buildingid,QString address,QString ownername,QString tel,QString name,QString number,QString ordertime);
    void Shopping_update(QString arrivetime, QString tel, QString name, QString ordertime);
    void Shopping_delete(QString tel,QString name,QString ordertime);
};

#endif // DATABASE_H
